package com.dmp.util;

/**
 * Created by wangqiang on 2016/12/16.
 */
public class IPScopeUtil {

    /*验证IP是否属于某个IP段
     *
     * ipSection    IP段（以'-'分隔）
     * ip           所验证的IP号码
     *
     */
    public static boolean ipExistsInRange(String ip, String ipSection) {
        ipSection = ipSection.trim();
        ip = ip.trim();
        int idx = ipSection.indexOf('-');
        if (idx == -1) return false;
        String beginIP = ipSection.substring(0, idx);
        String endIP = ipSection.substring(idx + 1);
        if (!(isIp(ip) && isIp(beginIP) && isIp(endIP)))
            return false;
        return getIp2long(beginIP) <= getIp2long(ip) && getIp2long(ip) <= getIp2long(endIP);
    }

    public static long getIp2long(String ip) {
        ip = ip.trim();
        String[] ips = ip.split("\\.");
        long ip2long = 0L;
        for (int i = 0; i < 4; ++i) {
            ip2long = ip2long << 8 | Integer.parseInt(ips[i]);
        }
        return ip2long;
    }

    public static long getIp2long2(String ip) {
        ip = ip.trim();
        String[] ips = ip.split("\\.");
        long ip1 = Integer.parseInt(ips[0]);
        long ip2 = Integer.parseInt(ips[1]);
        long ip3 = Integer.parseInt(ips[2]);
        long ip4 = Integer.parseInt(ips[3]);
        long ip2long = 1L * ip1 * 256 * 256 * 256 + ip2 * 256 * 256 + ip3 * 256 + ip4;
        return ip2long;
    }

    public static boolean isIp(String IP) {//判断是否是一个IP
        boolean b = true;
        String[] sss = IP.split("\\.");
        if (sss.length < 4) {
            b = false;
        } else {
            try {
                for (int x = 0; x < sss.length; x++) {
                    int a = Integer.valueOf(sss[x]);
                    if (!(a >= 0 && a <= 255)) {
                        b = false;
                        break;
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
                b = false;
            }
        }

        return b;
    }

    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        //10.10.10.116 是否属于固定格式的IP段10.10.1.00-10.10.255.255
        String ip = "99999";
        String ipSection = "10.10.1.00-10.10.255.255";
        boolean exists = ipExistsInRange(ip, ipSection);
        long end = System.currentTimeMillis();
        long tt = end - start;
        System.out.println(exists + "--" + tt);
    }
}
